package actividades;

import java.io.IOException;
import java.util.LinkedHashMap;

import org.json.JSONException;
import org.json.JSONObject;
import org.osmdroid.util.GeoPoint;

import comunicacionServidor.FuncionesJSON;

import tratamientoDatos.CreacionRutaGPX;
import tratamientoDatos.Ruta;
import world.trainer.R;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class GuardarActivity extends Activity {

	private float duracion, distanciaTotal, velocidadMedia, velocidadMaxima,
			calorias;
	private int tipo;
	private EditText nombreRuta;
	private Ruta ruta;
	private String nombreR;
	private static String KEY_SUCCESS = "success";
	private ProgressDialog dialog;
	private boolean correcto;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.guardar_activity);
		correcto = true;
		Bundle bundle = getIntent().getExtras();

		distanciaTotal = (float) bundle.getDouble("DISTANCIA");
		velocidadMedia = (float) bundle.getDouble("VELOCIDADMEDIA");
		velocidadMaxima = (float) bundle.getDouble("VELOCIDADMAXIMA");
		duracion = (float) bundle.getDouble("DURACION");
		calorias = (float) bundle.getDouble("CALORIAS");
		tipo = bundle.getInt("TIPO");
		ruta = bundle.getParcelable("RUTA");

		final Button btnguardar = (Button) findViewById(R.id.botonGuardarRutaBici);
		Button cancelarGuardar = (Button) findViewById(R.id.botonCancelarGuardarRutaBici);
		dialog = ProgressDialog.show(this, "", "Cargando...", true);
		dialog.dismiss();

		cancelarGuardar.setOnClickListener(new OnClickListener() {

			public void onClick(View arg0) {
				finish();
				Intent intent = new Intent(getApplicationContext(),
						MainActivity.class);
				Bundle bundle = new Bundle();
				bundle.putString("ACTIVITY", "guardar");
				intent.putExtras(bundle);
				intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				startActivity(intent);
			}
		});

		btnguardar.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				// Realizamos el almacenamiento de la ruta en la base de datos y
				// en el servidor
				dialog.show();
				correcto = true;
				new ClaseComunicacion().execute();
			}
		});
	}

	private class ClaseComunicacion extends AsyncTask<Void, Void, Void> {

		@Override
		protected Void doInBackground(Void... params) {

			nombreRuta = (EditText) findViewById(R.id.valNombreRutaAGuardarBici);
			LinkedHashMap<Long, GeoPoint> rutaCamino = ruta.getCamino();
			nombreR = nombreRuta.getText().toString();

			try {
				// Guardamos el fichero ruta en el servidor y los datos de la
				// ruta en la base de datos
				new CreacionRutaGPX(nombreR, rutaCamino);
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
				correcto = false;
			} catch (IllegalStateException e) {
				e.printStackTrace();
				correcto = false;
			} catch (IOException e) {
				e.printStackTrace();
				correcto = false;
			}
			if (correcto) {
				try {
					FuncionesJSON userFunction = new FuncionesJSON();
					// Guardamos los datos del usuario al realizar la ruta
					// (InfoRuta) en
					// la base de datos
					JSONObject json = userFunction.guardarInfo(duracion,
							distanciaTotal, velocidadMedia, velocidadMaxima,
							calorias, tipo, nombreR);

					if (json.getString(KEY_SUCCESS) != null) {
						String res = json.getString(KEY_SUCCESS);
						if (Integer.parseInt(res) != 1) {
							Log.v("JSON FINAL Info",
									"ERROR InfoRuta no guardada");
							correcto = false;
						}
					}
				} catch (JSONException e) {
					e.printStackTrace();
					correcto = false;
				}
			}

			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			dialog.dismiss();
			if (correcto) {
				Toast toast = Toast.makeText(getApplicationContext(),
						"Ruta guardada", Toast.LENGTH_LONG);
				toast.show();
				finish();
				Intent intent = new Intent(getApplicationContext(),
						MainActivity.class);
				Bundle bundle = new Bundle();
				bundle.putString("ACTIVITY", "guardar");
				intent.putExtras(bundle);
				intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				startActivity(intent);
			} else {
				Toast toast = Toast.makeText(getApplicationContext(),
						"La ruta no se ha podido guardar", Toast.LENGTH_LONG);
				toast.show();
			}
		}
	}

	public void onBackPressed() {

		finish();
		Intent intent = new Intent(getApplicationContext(), MainActivity.class);
		Bundle bundle = new Bundle();
		bundle.putString("ACTIVITY", "guardar");
		intent.putExtras(bundle);
		intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		startActivity(intent);
	}

	public void onPause() {

		finish();
		super.onPause();
	}

}
